package sdedit

import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.IFileSystemAccess
import sdmakerz_v1.coresyntax.generator.interfaces.IContext
import sdmakerz_v1.coresyntax.generator.interfaces.ISDMakerModelLevelGen
import sdmakerz_v2.sdedit_extension.sDMakerV2.SDEditModel

class SDEditToSDMakerGen implements ISDMakerModelLevelGen  {

	override boolean canHandle(Resource input) {
		var boolean canHandle= false;

		for(EObject eo : input.
							allContents.
							toIterable){
			if(eo instanceof SDEditModel){
				canHandle= true;
			}
		}	

		return canHandle
	}
	
	override doGenerate(IContext context, IFileSystemAccess fsa) {
//	    var IInputData inputData= context.getInputData;
//	    var Resource input= inputData.getInput;
//
//	    /* Dans les resources non edites par l'utilisateur, il n'y
//	     * aura qu'un modele. */
//	    for(sdEditModel : input.allContents.toIterable.filter(typeof(SDEditModel))){
//	       var CharSequence charSequenceResult='''
//	       diagram EDIT_ME {
//	           «FOR elt : sdEditModel.elements»
//	               «compile(elt)»
//	           «ENDFOR»
//	       }
//	       '''
//        
//           fsa.generateFile("sdmaker-gen/"+
//           	                inputData.getOutputBasedName+".sdm", 
//           	                charSequenceResult);
//        }
	}
	
//	def CharSequence compile(EObject eo){
//	    switch eo {
//	    SDEditObj: 
//	        compileSDEditObj(eo)
//	    SDEditCall: 
//	        compileSDEditCall(eo)
//	    SDEditAlt:
//	        compileSDEditAlt(eo)
//        SDEditLoop:
//            compileSDEditLoop(eo)
//        SDEditOpt:
//            compileSDEditOpt(eo)
//	    default:
//	       ''''''
//	    }
//	} 
//	
//	def CharSequence compileSDEditObj(SDEditObj obj){
//	    '''
//	    obj «obj.type.identifier» «obj.name»;
//	    '''
//	}
//	
//	def CharSequence compileSDEditCall(SDEditCall call){
//	    '''«call.caller» -> «call.called».«call.name»()'''
//	}
//	
//	def CharSequence compileSDEditAlt(SDEditAlt alt){
//        '''
//        alt{
//            conseq {
//                «compile(alt.conseq)»
//            }
//            «FOR alter : alt.alters»
//            alter{
//                «compile(alter)»
//            }
//            «ENDFOR»
//        }
//        '''
//    }
//    
//    def CharSequence compileSDEditLoop(SDEditLoop loop){
//        '''
//        loop {
//        «FOR elt : loop.body»
//            «compile(elt)»
//        «ENDFOR»
//        }
//        '''
//    }
//    
//    def CharSequence compileSDEditOpt(SDEditOpt opt){
//        '''
//        opt {
//        «FOR elt : opt.opts»
//            «compile(elt)»
//        «ENDFOR»
//        }
//        '''
//    }
}